package run.bottle.app.security.context;

import org.springframework.lang.Nullable;
import run.bottle.app.security.authentication.Authentication;

/**
 * 安全上下文接口
 *
 * @author Lycheng
 */
public interface SecurityContext {

    /**
     * 获取当前经过身份验证的主体。
     *
     * @return 如果身份验证信息不可用，则返回null
     */
    @Nullable
    Authentication getAuthentication();

    /**
     * 更改当前已认证的主体，或删除认证信息。
     *
     * @param authentication 新的身份验证信息
     */
    void setAuthentication(@Nullable Authentication authentication);


    /**
     * 检查当前上下文是否已通过身份验证。
     *
     * @return 如果通过验证，则为true；否则为false
     */
    default boolean isAuthenticated() {
        return getAuthentication() != null;
    }

}
